package com.cskaoyan.javase.array._1basic._1initialization;

/**
 * 数组的初始化
 * 在方法等局部位置定义的局部变量数组，必须声明和初始化之后才能够使用
 * 类比于一个基本数据类型局部变量的初始化，初始化无非就是一个赋值的过程
 * 那么数组的初始化就是在内存中开辟数组存储空间，然后给数组的每一个存储单元赋值
 * 这就意味着数组的初始化，必须要明确：
 *      1.数组的长度
 *      2.数组中每个存储单元的取值
 * 以上两点缺一不可。
 *
 * 一维数组的初始化有两种方式：
 * 1.静态初始化指的是：
 *      由程序员显式的，指定数组中每个元素的值，数组的长度由系统决定
 *      （实际上也是由程序员给出的）
 * 和数组的声明写在一起，语法格式就是：
 * 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
 * 解释： new关键字表示创建对象
 *      数组的静态初始化语法是有简写形式的：
 *      数据类型[] 数组名 = {元素1,元素2,元素3...};
 *      简写形式只是简写了new关键字，但本质仍然要创建对象
 *      简写形式必须和数组的声明写在一次，不能给某个数组变量二次赋值。
 *
 * 2.动态初始化指的是：
 *      由程序员直接给出数组的长度
 *      而数组中每个元素的具体取值，由JVM在创建数组对象的时候给出
 *      称之为“默认值”
 *
 * 和数组的声明写在一起，动态初始化的语法是：
 * 数据类型[] 数组名 = new 数据类型[数组长度];
 * 解释： new关键字表示创建对象
 *
 *
 * @since 09:33
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 静态初始化一个长度为0的int类型数组
        int[] arr = new int[]{};
        // 静态初始化一个double类型数组
        double[] arr2 = new double[]{1, 2, 0.1};

        // 静态初始化简写形式
        int[] arr3 = {1, 2, 3};
        // arr = {1, 2, 3};

        // 动态初始化
        int[] arr4 = new int[0];
        int[] arr5 = new int[3];
        double[] arr6 = new double[3];
        /*
            以上，就是数组的两种初始化方式，（一维）数组没有第三种初始化的方式
            比如：
            静态初始化和动态初始化叠加使用，是经典的错误：
            数组名 = new 数据类型[数组长度]{元素1,元素2,元素3...};❌
         */
        // int[] arr7 = new int[3]{1,2,3};
    }
}
